Я певний час возився з JSON, просто виштовхуючи його як текст, і це нікому не зашкодило (про що я знаю), але я хотів би почати робити все належним чином. Я бачив стільки передбачуваних "стандартів" для типу вмісту JSON: application / json application / x-javascript текст / javascript text / x-javascript text / x-json Але який з них правильний, чи найкращий? Я розумію, що існують різні проблеми з безпекою та підтримкою браузера. Я знаю, що є подібне запитання: Який тип MIME, якщо JSON повертається REST API ?, але я хотів би трохи більш цілеспрямованої відповіді.
2020-12-07 21:18:10
1 2 Далі Для тексту JSON: application / json Тип носія MIME для тексту JSON - це application / json. Кодування за замовчуванням - UTF-8. (Джерело: RFC 4627). Для JSONP (запущений JavaScript) із зворотним викликом: заявка / javascript Ось кілька дописів у блозі, які згадувались у відповідних коментарях: Чому ви не повинні використовувати text / html для JSON Internet Explorer іноді має проблеми з application / json Досить повний перелік міметипів і для чого їх використовувати Офіційний список типів mime на IANA із відповіді @ gnrfan нижче | IANA зареєструвала офіційний тип MIME для JSON як application / json. На запитання про те, чому не text / json, Крокфорд, схоже, сказав, що JSON насправді не є ні JavaScript, ні текстом, а також IANA частіше роздавала application / *, ніж text / *. Більше ресурсів: Типи носіїв Запит на коментарі 4627 bluesmoon: JSON має тип | Для JSON: Тип вмісту: application / json Для JSON-P: Тип вмісту: додаток / javascript | Звичайно, правильним типом носія MIME для JSON є application / json, але необхідно усвідомити, який тип даних очікується у вашій програмі. Наприклад, я використовую Ext GWT, і відповідь сервера повинна йти як text / html, але містить дані JSON. На стороні клієнта, прослуховувач форми Ext GWT uploadForm.getForm (). addListener (новий FormListenerAdapter () { @Override public void onActionFailed (форма форми, int httpStatus, String responseText) { MessageBox.alert ("Помилка"); } @Override public void onActionComplete (форма форми, int httpStatus, String responseText) { MessageBox.alert ("Успіх"); } }); У випадку використання типу відповіді application / json, браузер пропонує мені зберегти файл. Фрагмент вихідного коду на стороні сервера за допомогою Spring MVC повернути новий AbstractUrlBasedView () { @SuppressWarnings ("не позначено") @Override protected void renderMergedOutputModel (модель карти, запит HttpServletRequest, HttpServletResponse відповідь) викидає виняток { response.setContentType ("text / html"); response.getWriter (). write (json); } }; | JSON: Відповідь - це динамічно генеровані дані відповідно до параметрів запиту, переданих в URL-адресі. Приклад: {"Name": "Foo", "Id": 1234, "Rank": 7} Тип вмісту: application / json JSON-P: JSON із заповненням. Відповідь - це дані JSON, навколо яких обгорнутий виклик функції. Приклад: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Тип вмісту: додаток / javascript | Якщо ви використовуєте Ubuntu або Debian, і ви обслуговуєте файли .json через Apache, можливо, вам доведеться обслуговувати файли правильного типу вмісту. Я роблю це насамперед тому, що хочу використовувати розширення Firefox JSONView Модуль Apache mod_mime допоможе зробити це легко. Однак з Ubuntu вам потрібно відредагувати файл /etc/mime.types і додати рядок application / json json Потім перезапустіть Apache: sudo service apache2 перезапустити | Якщо ви викликаєте веб-служби ASP.NET з клієнтської сторони, вам потрібно використовувати application / json, щоб вона працювала. Я вважаю, що це те саме для фреймворків jQuery та Ext. | Правильним типом вмісту для JSON є application / json, ПОКЛИ ви не використовуєте JSONP, також відомий як JSON with Padding, що насправді є JavaScript, тому правильним типом вмісту буде application / javascript. | Немає сумнівів, що application / json - найкращий тип MIME для відповіді JSON. Але я мав певний досвід, коли мені доводилось використовувати application / x-javascript через деякі проблеми стиснення. Моє середовище хостингу - спільний хостинг з GoDaddy. Вони не дозволяють мені змінювати конфігурації сервера. Я додав наступний код у свій файл web.config для стиснення відповідей.<схема імені = "gzip" dll = "% Windir% \ system32 \ inetsrv \ gzip.dll" /> Використовуючи це, сторінки .aspx стискалися за допомогою g-zip, але відповіді JSON - ні. я додав у розділах статичного та динамічного типів. Але це зовсім не стискає відповіді JSON. Після цього я видалив цей нещодавно доданий тип і додав як у розділах статичного, так і динамічного типів, і змінив тип відповіді в .ashx (асинхронний обробник) до application / x-javascript І тепер я виявив, що мої відповіді JSON були стиснуті за допомогою g-zip. Тому я особисто рекомендую використовувати application / x-javascript лише якщо ви хочете стиснути свої відповіді JSON у середовищі спільного хостингу. Оскільки в спільному хостингу вони не дозволяють змінювати IISконфігурації. | Тільки при використанні application / json як типу MIME я маю таке (станом на листопад 2011 року з найновішими версіями Chrome, Firefox з Firebug): Немає більше попереджень від Chrome, коли JSON завантажується з сервера. Firebug додасть вкладку до відповіді, показуючи вам дані JSON відформатовано. Якщо тип MIME відрізняється, він просто відображатиметься як 'Зміст відповіді'. | Не все працює для типу вмісту application / json. Якщо ви використовуєте форму Ext JS для надсилання у файл для завантаження, пам’ятайте, що браузер аналізує відповідь сервера, щоб створити документ для